// 使用泛型类型参数 T 来替代具体的 PurchaseDetails 类型
import '../types/product_details.dart';
import '../types/purchase_details_zdy.dart';

abstract class InAppPurchaseService<T> {
  /// 初始化内购服务
  /// 此方法通常用于初始化内购 SDK，连接到应用商店的内购服务
  Future<void> initialize();


  /// 恢复已完成的购买
  /// 此方法用于让用户恢复之前已经完成的购买，通常在应用启动时调用
  /// 返回一个布尔值，表示恢复操作是否成功发起
  Future<void> restorePurchases();

  /// 获取可用的商品列表
  /// [productIds] 要查询的商品 ID 列表
  /// 返回一个包含可用商品详细信息的列表
  Future<List<ProductDetailsZdy>> getAvailableProducts(List<String> productIds);

  /// 获取购买状态更新的流
  /// 通过监听此流，可以实时获取购买操作的状态变化，如购买成功、失败、恢复等
  Future<void> purchaseUpdates({Function(PurchaseDetailsZdy purchaseDetails)? onPurchased});

  /// 取消购买状态更新的监听
  Future<void> cancelPurchaseUpdates();
  /// 购买商品
  /// [productId] 商品 ID
  /// [applicationUserName] 应用用户名
  /// [productType] 商品类型 consumable 消耗型商品（可重复购买） nonConsumable 非消耗型商品(只能支付一次)
  Future<bool> buyProduct(String productId,{String? applicationUserName,String? productType='consumable'});

}
